﻿#ifndef CONSTANTDEFINITION_H
#define CONSTANTDEFINITION_H
#include "datatypedefinition.h"

namespace ConstantDefine {

//enum TypeFrom{
//    PROJECT = 0,     // 工程
//    LIBRARY = 1      // 算法库
//};

//enum ColumNumber{
//    NAME = 0,        // 名称
//    TYPE = 1,        // 类型
//    VALUE = 2,       // 值
//    COMMENTS = 3     // 描述
//};

//enum ItemType{
//    ROOT = 0,         // 根节点
//    NORMAL,           // 普通节点
//    STRUCTELE,        // 普通结构体节点
//    STRUCTELE_ROOT,   // 结构体根节点
//    ARRAY,            // 普通数组节点
//    ARRAY_ROOT        // 数组根节点
//};

struct StructEle;
struct DimensionArray;
typedef QList<StructEle>  StructEleList;

struct DimensionArray{
//    DimensionArray() {arrayType = "bool";}

//    DimensionArray(
//            const QString &arrayType,
//            const QString &elementDef,
//            const QStringList &elementValue,
//            const QList<DimensionArray> &array,
//            const QList<StructEleList> &structure)
//        : arrayType(arrayType)
//        , elementDef(elementDef)
//        , elementValue(elementValue)
//        , array(array)
//        , structure(structure)
//    {

//    }

//    DimensionArray(const DimensionArray &other)
//        : arrayType(other.arrayType)
//        , elementDef(other.elementDef)
//        , elementValue(other.elementValue)
//        , array(other.array)
//        , structure(other.structure)
//    {

//    }

//    DimensionArray& operator = (const DimensionArray &other)
//    {
//        if (this != &other)
//        {
//            this->arrayType = other.arrayType;
//            this->elementDef = other.elementDef;
//            this->elementValue = other.elementValue;
//            this->array = other.array;
//            this->structure = other.structure;
//        }
//        return *this;
//    }

//    bool operator == (const DimensionArray &other) const
//    {
//        return (this->arrayType == other.arrayType && this->elementDef == other.elementDef && this->elementValue == other.elementValue
//                && this->array == other.array && this->structure == other.structure);
//    }

    // 数组类型
    QString arrayType;

    //元素定义
    QString elementDef;

    //元素值
    QStringList elementValue;

    QList<DimensionArray> array;

    QList<StructEleList> structure;
};

struct StructEle{

    QString lableName;

    //元素名称
    QString elementName;

    //元素定义
    QString elementDef;

    //元素值
    QString elementValue;

    StructEleList structEles;

    DimensionArray array;
};

struct Constant{
    //xml节点
    QDomNode node;

    // 常量名称
    QString name;

    // 常量数据类型名称
    QString typeName;

    // 常量基础数据类型
    QString baseType;

    // 常量值
    QString value;

    // 结构体元素
    StructEleList structElements;

    // 数组类型
    DimensionArray array;

    // 作用域
    QString actionScope;

    // 描述
    QString comments;

    // ID
    QString oid;
};
typedef QList<Constant>  ConstantList;
}

#endif // CONSTANTDEFINITION_H
